package practice1_100;
import practice1_100.ListNode;

//给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
//
//你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
public class Practice24 {
    public ListNode swapPairs(ListNode head) {
        if(head==null) return head;
        ListNode falseHead=new ListNode();//新建一个头作为头指针
        ListNode falseRese=falseHead;//这个指针做循环遍历
        ListNode  temp;
        while (head!=null&&head.next!=null){//链表 当前和下一个节点不为空 循环
            temp=head; //临时保存要改表的两个节点
            head=head.next.next; //把head指针后移两个节点

            //将临时保存的两个节点存入新建的指针中
            falseRese.next=temp.next;
            falseRese.next.next=temp;
            falseRese=temp;
        }
        //剩下0个 、1个节点无法循环时候。将剩下的添加进去
        falseRese.next=head;
        //返回头指针的next就是得到的链表
        return  falseHead.next;
    }
}
